/*
 * AsistenteObtencionDeTerminos.h
 *
 *  Created on: 27/11/2011
 *      Author: putaro
 */

#include <string>
#include <iostream>
#include <stdlib.h>
#include <fstream>

#ifndef ASISTENTEOBTENCIONDETERMINOS_H_
#define ASISTENTEOBTENCIONDETERMINOS_H_
#define TAM_BUFFER_LECTURA 256

using namespace std;

//estructura del archivo generado
typedef struct registroTerminos{
	unsigned int documento;
	unsigned int longitudTermino;
}T_RegistroTerminos;

/*
 * Una instancia de esta clase permite recuperar los términos de una serie de archivos de un
 * directorio.
 */
class AsistenteObtencionDeTerminos {

private:

	char bufferLecturaCaracteres[TAM_BUFFER_LECTURA];

	int posicionBufferLecturaCaracteres;



public:

	/*
	 * Pre:-
	 * Post: Se ha creado una instancia de la clase lista para ser utilizada.
	 */
	AsistenteObtencionDeTerminos();

	/*
	 * Pre: La instancia ha sido creada.
	 * Post: La instancia ha sido destruida liberando los recursos asociados.
	 */
	virtual ~AsistenteObtencionDeTerminos();

	/*
	 * Pre: La instancia ha sido creada.
	 * Pos: Se han recuperando los términos generando un archivo con los mismos.
	 * Return: Se retorna el número de documentos explorados.
	 */
	unsigned int recuperarTerminos(const string & directorioArchivoRutasDocumentos ,
								const string & directorioDestino);

	/*
	 * Pre: La instancia ha sido creada y el parámetro archivo salida ha sido abierto.
	 * El parámetro rutaArchivoFuente, contiene la ruta completa del archivo del cual
	 * se quieren extraer todos los términos.
	 *
	 * Post: Se cargan todos los terminos de un archivo dado.
	*/
	void cargarTerminosArchivo(ofstream &salida , const string & rutaArchivoFuente ,
								const unsigned int idDocumento);

	/*
	 * Pre: La instancia ha sido creada.
	 * Post: Se retorna un puntero a un nuevo término.
	 * Return: En caso de que no se pueda recuperar un nuevo término se retorna NULL.
	 */
	string* leerTermino(ifstream &archivo);

	/*
	 * Pre: La instancia ha sido creada.
	 * Post: El parámetro caracter tiene el siguiente caracteres leido.
	 * Returns: True si se pudo leer un nuevo caracter
	 */
	bool leerCaracter(ifstream &archivo ,char & caracter);
};


#endif /* ASISTENTEOBTENCIONDETERMINOS_H_ */
